Skip to content

iommu/arm-smmu: Add interconnect bandwidth voting support#590

Open
bibekpatro wants to merge 2 commits into
qualcomm-linux:qcom-6.18.yfrom
bibekpatro:qcom-6.18.y
Open

iommu/arm-smmu: Add interconnect bandwidth voting support#590
bibekpatro wants to merge 2 commits into
qualcomm-linux:qcom-6.18.yfrom
bibekpatro:qcom-6.18.y

Conversation

@bibekpatro
Copy link
Copy Markdown

iommu/arm-smmu: Add interconnect bandwidth voting support

Link: https://lore.kernel.org/all/20260516-smmu_interconnect_addition-v1-0-f889d933f5c1@oss.qualcomm.com/#t

CRs-Fixed: 4523338

@bibekpatro bibekpatro requested review from a team, Komal-Bajaj, quic-kaushalk and trsoni May 16, 2026 12:56
@qswat-orbit-external
Copy link
Copy Markdown

Merge Check Failed: No Change Task Found

No associated change tasks found for CR 4523338 on any of the following entities:

Entities:

  • kernel.qli.2.0

CR: 4523338

Please ensure the CR has a change task associated with at least one of the entities for this branch.

Copy link
Copy Markdown

@shashim-quic shashim-quic left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Add Link: tag pointing to lore link in your commit log.

@sgaud-quic
Copy link
Copy Markdown
Contributor

PR #590 — validate-patch

PR: #590

Verdict Issues Detailed Report
0 Full report
Verdict: ❌ — click to expand

🔍 Patch Validation

PR: qualcomm-linux/kernel #590 — 2 commits: FROMLIST: dt-bindings: iommu: arm,smmu: Document optional interconnects property + FROMLIST: iommu/arm-smmu: Add interconnect bandwidth voting support
Upstream commit: ❌ No Link: tag found in either commit
Verdict: ❌ FAIL


Step 1 — Lore Link Check

Both commits carry the FROMLIST: prefix, which requires a Link: https://lore.kernel.org/r/<message-id> tag. Neither commit contains one. Network access is unavailable in this environment, so lore.kernel.org cannot be queried to locate the postings independently.

  • Commit 1 (51541a78a199): FROMLIST: dt-bindings: iommu: arm,smmu: Document optional interconnects propertyno Link tag
  • Commit 2 (f0764e9f6b25): FROMLIST: iommu/arm-smmu: Add interconnect bandwidth voting supportno Link tag

Because no lore URL is present, Steps 2, 5, 7, 8, 9 (diff comparison against upstream) cannot be performed.


Commit Message

Check Commit 1 (dt-bindings) Commit 2 (arm-smmu.c/.h)
FROMLIST: prefix present
Link: tag present ❌ Missing ❌ Missing
Subject line well-formed
Body preserves rationale ✅ Adequate ✅ Adequate
Fixes: tag N/A (new feature) N/A (new feature)
Original author Signed-off-by: bibek.patro@oss.qualcomm.com bibek.patro@oss.qualcomm.com
Co-developed-by: misuse N/A N/A
Backport note N/A N/A

Diff

File Status Notes
Documentation/devicetree/bindings/iommu/arm,smmu.yaml ⚠️ REVIEW Cannot compare to lore (no Link tag). Content self-consistent: adds interconnects with maxItems: 1 and description.
drivers/iommu/arm/arm-smmu/arm-smmu.c ⚠️ REVIEW Cannot compare to lore. Logic coherent: icc_get/icc_enable/icc_disable helpers added; called in probe, runtime_resume, runtime_suspend. See issue #3 below.
drivers/iommu/arm/arm-smmu/arm-smmu.h ⚠️ REVIEW Cannot compare to lore. Adds #include <linux/interconnect.h> and icc_path field to arm_smmu_device — correct.

Upstream Patch Status

Commit Community Verdict
dt-bindings: iommu: arm,smmu: Document optional interconnects property ⏳ Decision Pending — no lore link; network unavailable; cannot verify mailing-list status
iommu/arm-smmu: Add interconnect bandwidth voting support ⏳ Decision Pending — no lore link; network unavailable; cannot verify mailing-list status

qcom-next Presence

Commit Status
FROMLIST: dt-bindings: iommu: arm,smmu: Document optional interconnects property ⏭️ Skipped — network access unavailable; verify manually
FROMLIST: iommu/arm-smmu: Add interconnect bandwidth voting support ⏭️ Skipped — network access unavailable; verify manually

Issues

  1. Missing Link: tag — Commit 1 (51541a78a199): FROMLIST: commits must include Link: https://lore.kernel.org/r/<message-id>. Without it the patch cannot be traced to its upstream origin and check-patch-compliance CI fails.

  2. Missing Link: tag — Commit 2 (f0764e9f6b25): Same as issue Create qualcomm-linux-organization-repolinter.yml #1.

  3. ICC vote leaked on probe error path — Commit 2: In arm_smmu_device_probe, arm_smmu_icc_enable() is called before arm_smmu_device_cfg_probe(). If arm_smmu_device_cfg_probe() (or any subsequent step) returns an error, the function returns without calling arm_smmu_icc_disable(), leaving the interconnect bandwidth vote active. All error-return paths after arm_smmu_icc_enable() in probe should call arm_smmu_icc_disable() before returning.

     err = arm_smmu_device_cfg_probe(smmu);
    -	if (err)
    -		return err;
    +	if (err) {
    +		arm_smmu_icc_disable(smmu);
    +		return err;
    +	}

    (And similarly for any further error returns in the probe function after this point.)


Verdict

Do not merge. Both commits must be amended to add a Link: https://lore.kernel.org/r/<message-id> tag pointing to the mailing-list posting before this PR can be validated or merged. Additionally, the ICC vote leak on probe error paths in Commit 2 should be fixed. Recommended actions:

  1. Post (or confirm posting of) both patches to linux-iommu@lists.linux.dev and devicetree@vger.kernel.org.
  2. Obtain the lore message-ID for each patch and amend each commit to add the Link: line.
  3. Fix the missing arm_smmu_icc_disable() call on all error-return paths in arm_smmu_device_probe() after arm_smmu_icc_enable() is called.
  4. Force-push and re-run CI.

@sgaud-quic
Copy link
Copy Markdown
Contributor

PR #590 — checker-log-analyzer

PR: #590
Checker run: https://github.com/qualcomm-linux/kernel-config/actions/runs/25962535905

Checker Result Summary
Checker Result Summary
checkpatch 0 errors, 0 warnings on both commits
dt-binding-check dt_binding_check and dtbs_check passed for arm,smmu.yaml
dtb-check ⏭️ No changes in Devicetree — skipped
sparse-check No new sparse errors introduced by PR
check-uapi-headers No changes to UAPI headers
check-patch-compliance Both commits missing Link: tag
tag-check Both commits carry FROMLIST: prefix — satisfies requirement
qcom-next-check N/A PR targets qcom-6.18.y, not qcom-next

Detailed report: Full report

Checker analysis — click to expand

🤖 CI Checker Analysis (checker-log-analyzer)

PR: FROMLIST: iommu/arm-smmu: Add interconnect bandwidth voting support — #590
Source: https://github.com/qualcomm-linux/kernel-config/actions/runs/25962535905
Target branch: qcom-6.18.y (base SHA: 6964936c9bfc, head SHA: f0764e9f6b25)

Checker Result Summary
checkpatch 0 errors, 0 warnings on both commits
dt-binding-check dt_binding_check and dtbs_check passed for arm,smmu.yaml
dtb-check ⏭️ No changes in Devicetree — skipped
sparse-check No new sparse errors introduced by PR
check-uapi-headers No changes to UAPI headers
check-patch-compliance Both commits missing Link: tag
tag-check Both commits carry FROMLIST: prefix — satisfies requirement
qcom-next-check N/A PR targets qcom-6.18.y, not qcom-next

❌ check-patch-compliance

Root cause: Both FROMLIST: commits are missing a Link: trailer pointing to the upstream lore.kernel.org message, which is required for all FROMLIST: patches.

Failure details:

Checking commit: FROMLIST: dt-bindings: iommu: arm,smmu: Document optional interconnects property
No 'Link' found in commit message

Checking commit: FROMLIST: iommu/arm-smmu: Add interconnect bandwidth voting support
No 'Link' found in commit message

##[error]Process completed with exit code 1.

Fix: Add a Link: trailer to each commit pointing to the upstream lore.kernel.org thread. Find the correct lore URL for each patch (e.g. via b4 search or the mailing list archive), then amend both commits:

# For commit 1 (dt-bindings patch):
git rebase -i 6964936c9bfc
# mark 51541a78a199 as 'edit'
git commit --amend
# Add to commit body:
#   Link: https://lore.kernel.org/r/<message-id>
git rebase --continue

# For commit 2 (arm-smmu driver patch):
# mark f0764e9f6b25 as 'edit'
git commit --amend
# Add to commit body:
#   Link: https://lore.kernel.org/r/<message-id>
git rebase --continue

Reproduce locally:

bash kernel-checkers/check-patch-compliance.sh \
  --kernel-src <path/to/kernel> \
  --base 6964936c9bfc3337aa8ba8a0fb25021d06e5ce04 \
  --head f0764e9f6b253c50d16ad236cf4d39571bc7ed86

Verdict

1 blocker to fix before merge: add Link: https://lore.kernel.org/r/<message-id> to both FROMLIST: commits (51541a78a199 and f0764e9f6b25). All other checkers pass or are not applicable.

…ts property

Some SoC implementations require a bandwidth vote on an interconnect
path before the SMMU register space is accessible. Add the optional
'interconnects' property to the binding to allow platform DT nodes
to describe this path.

The arm-smmu driver uses these properties to vote for bandwidth before
accessing any SMMU registers and releases the vote on runtime suspend.

Link: https://lore.kernel.org/all/20260516-smmu_interconnect_addition-v1-1-f889d933f5c1@oss.qualcomm.com/
Signed-off-by: Bibek Kumar Patro <bibek.patro@oss.qualcomm.com>
On some SoCs the SMMU registers require an active interconnect
bandwidth vote to be accessible. While other clients typically
satisfy this requirement implicitly, certain corner cases (e.g.
during sleep/wakeup transitions) can leave the SMMU without a
vote, causing intermittent register access failures.

Add support for an optional interconnect path to the arm-smmu
driver and vote for bandwidth while the SMMU is active. The path
is acquired from DT if present and ignored otherwise.

The bandwidth vote is enabled before accessing SMMU registers
during probe and runtime resume, and released during runtime
suspend and on error paths.

Generally, from an architectural perspective, GEM_NOC and DDR are
expected to have an active vote whenever the adreno_smmu block is
powered on. In most common use cases, this requirement is implicitly
satisfied because other GPU-related clients (for example, the GMU
device) already hold a GEM_NOC vote when adreno_smmu is enabled.

However, there are certain corner cases, such as during sleep/wakeup
transitions, where the GEM_NOC vote can be removed before adreno_smmu
is powered down. If adreno_smmu is then accessed while the interconnect
vote is missing, it can lead to the observed failures. Because of the
precise ordering involved, this scenario is difficult to reproduce
consistently.
(also GDSC is involved in adreno usecases can have an independent vote)

Link: https://lore.kernel.org/all/20260516-smmu_interconnect_addition-v1-2-f889d933f5c1@oss.qualcomm.com/
Signed-off-by: Bibek Kumar Patro <bibek.patro@oss.qualcomm.com>
@qswat-orbit-external
Copy link
Copy Markdown

Merge Check Failed: No Change Task Found

No associated change tasks found for CR 4523338 on any of the following entities:

Entities:

  • kernel.qli.2.0

CR: 4523338

Please ensure the CR has a change task associated with at least one of the entities for this branch.

@bibekpatro
Copy link
Copy Markdown
Author

Add Link: tag pointing to lore link in your commit log.

Addressed for both the commits now.

@qcomlnxci qcomlnxci requested a review from a team May 18, 2026 05:37
Copy link
Copy Markdown

@shashim-quic shashim-quic left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Diff and code quality look good. Both commits show committer == author (bibek.patro@oss.qualcomm.com). Please have a separate integrator commit/sign off before merging.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants